package com.fearless.crm.web.listener;

import com.fearless.crm.settings.entity.DicValue;
import com.fearless.crm.settings.service.DicService;
import org.springframework.web.context.support.WebApplicationContextUtils;

import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.*;

public class SysInitListener implements ServletContextListener {

/*
    该方法用于监听全局作用域对象(上下文作用域对象)的创建，当服务器启动时，全局作用域对象
  创建完毕，然后执行该方法contextInitialized

  参数servletContextEvent，可以通过该参数获取全局作用域对象(上下文作用域对象)

 */
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("application全局作用域创建成功");
        System.out.println("服务器处理数据字典开始");
        ServletContext application=servletContextEvent.getServletContext();
        //获取数据字典
        //application.setAttribute("",);
        DicService dicService= WebApplicationContextUtils.getWebApplicationContext(servletContextEvent.getServletContext()).getBean(DicService.class);
        dicService.test();

        Map<String, List<DicValue>> map=dicService.getAll();
        //将map解析为上下文作用域对象【全局作用域对象】中保存的键值对
        Set<String> keys=map.keySet();
        //就是把这个map放在全局作用域对象中
        for(String s:keys){
            application.setAttribute(s,map.get(s));
        }


        System.out.println("服务器处理数据字典结束");
//=========================================================================================
        System.out.println("开始属性配置文件的处理");
    //数据字典处理完毕，我们开始处理stageToPossibility.properties文件

      /*
        处理stageToPossibility.properties文件的步骤:
            1.解析该文件，将属性配置文件中的键值对关系处理成为java中键值对关系(Map)
            Map<String(阶段stage),String(可能性possibility)> map=new HashMap();
            map.put("01资格审查",10)
            map.put("02需求分析",25)
            map.put("07..",...)

            2.将这个map保存到全局作用域中(服务器缓存/上下文作用域)
            application.setAttribute("pMap",map)


       */
       Map<String,String> pMap=new HashMap();

      //解析这个properties文件
      ResourceBundle resourceBundle=ResourceBundle.getBundle("conf/Stage2Possibility");
        //枚举
      Enumeration<String> e=resourceBundle.getKeys();//将这个配置文件中所有的"key"获取到
        //对所有的key遍历迭代
      while(e.hasMoreElements()){

          //获取阶段
          String key=e.nextElement();

          //获取可能性
          String value=resourceBundle.getString(key);

          pMap.put(key,value);

      }

       //pMap保存到服务器缓存中(全局作用域/上下文作用域)
        application.setAttribute("pMap",pMap);

    }

    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("application全局作用域销毁成功");
    }
}
